package com.liuyuxing.test;

import com.liuyuxing.test.Factory.PromotionStrategyFactory;
import com.liuyuxing.test.constants.PromotionType;
import com.liuyuxing.test.entity.Fruit;
import com.liuyuxing.test.service.PromotionStrategyService;
import com.liuyuxing.test.service.impl.ShoppingCartServiceImpl;

import java.util.LinkedList;
import java.util.List;

public class test {

    public static void main(String[] args) {
        System.out.println(Test1());
        System.out.println(Test2());
        System.out.println(Test3());
        System.out.println(Test4());

    }

    /**
     * 1、有一家超市，出售苹果和草莓。其中苹果 8 元/斤，草莓 13 元/斤。
     * 现在顾客 A 在超市购买了若干斤苹果和草莓，需要计算一共多少钱？
     * 请编写函数，对于 A 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价
     */
    public static double Test1(){
        List<Fruit> cartA = new LinkedList<>();
        cartA.add(new Fruit("苹果", 8, 2));
        cartA.add(new Fruit("草莓", 13, 3));
        //设置促销策略
        PromotionStrategyService promotionStrategy = PromotionStrategyFactory.getPromotionStrategy(PromotionType.valueOf("NONE"));
        //按对应策略算出总价
        ShoppingCartServiceImpl shoppingCartService = new ShoppingCartServiceImpl();
        return shoppingCartService.calculateTotal(cartA,promotionStrategy);

    }

    /**
     * 2、超市增加了一种水果芒果，其定价为 20 元/斤。
     * 现在顾客 B 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     * 请编写函数，对于 B 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @return
     */
    public static double Test2(){
        List<Fruit> cartA = new LinkedList<>();
        cartA.add(new Fruit("苹果", 8, 1));
        cartA.add(new Fruit("草莓", 13, 1));
        cartA.add(new Fruit("芒果", 20, 1));
        //设置促销策略
        PromotionStrategyService promotionStrategy = PromotionStrategyFactory.getPromotionStrategy(PromotionType.valueOf("NONE"));
        //按对应策略算出总价
        ShoppingCartServiceImpl shoppingCartService = new ShoppingCartServiceImpl();
        return shoppingCartService.calculateTotal(cartA,promotionStrategy);
    }

    /**
     * 3、超市做促销活动，草莓限时打 8 折。
     * 现在顾客 C 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     * 请编写函数，对于 C 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @return
     */
    public static double Test3(){
        List<Fruit> cartA = new LinkedList<>();
        cartA.add(new Fruit("苹果", 8, 1));
        cartA.add(new Fruit("草莓", 13, 1));
        cartA.add(new Fruit("芒果", 20, 1));
        //设置促销策略
        PromotionStrategyService promotionStrategy = PromotionStrategyFactory.getPromotionStrategy(PromotionType.valueOf("DISCOUNT"));
        //按对应策略算出总价
        ShoppingCartServiceImpl shoppingCartService = new ShoppingCartServiceImpl();
        return shoppingCartService.calculateTotal(cartA,promotionStrategy);
    }


    /**
     * 4、促销活动效果明显，超市继续加大促销力度，购物满 100 减 10 块。
     * 现在顾客 D 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     * 请编写函数，对于 D 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @return
     */
    public static double Test4(){
        List<Fruit> cartA = new LinkedList<>();
        cartA.add(new Fruit("苹果", 8, 1));
        cartA.add(new Fruit("草莓", 13, 1));
        cartA.add(new Fruit("芒果", 20, 10));
        //设置促销策略
        PromotionStrategyService promotionStrategy = PromotionStrategyFactory.getPromotionStrategy(PromotionType.valueOf("FULL_REDUCTION"));
        //按对应策略算出总价
        ShoppingCartServiceImpl shoppingCartService = new ShoppingCartServiceImpl();
        return shoppingCartService.calculateTotal(cartA,promotionStrategy);
    }
}
